const JWT = require('jsonwebtoken')
const koaJwt = require('koa-jwt')
// 密钥
const SECRET = 'dami zui shuai'
// 私钥
const KEY = 'jwtdata'

/**
 * 生成Token
 *  @info   用户的非私密信息
 */
module.exports.getToken= function(info){
    return JWT.sign(info, SECRET, {
        expiresIn: '2h' //两小时后过期
    })
}

/**
 * 处理异常请求，例如 401未授权(没携带token)
 *  @ctx    koa中的上下文
 *  @next   koa中执行下一个中间件的方法
 */
module.exports.errorHandle = function(ctx, next){
    return next().catch(err =>{
        if(401 === err.status){
            ctx.status = 401;
            ctx.body = 'Protected resource, use Authorization header to get access\n';
        }else{
            throw err;
        }
    })
}

/**
 * 指定那些地址需要携带token才能前往
 *  @unless 地址白名单
 */
module.exports.validate = koaJwt({
    secret: SECRET,
    key: KEY
}).unless({
    path: [/\/login/,/\/register/,/\/test/]
})

/**
 * 解析token，获取用户部分信息
 *  @auth   携带的token(requestHeader.auth)
 */
module.exports.verify = function(auth){
    let token = auth.substr(auth.indexOf(' ')+1)
    // console.log(token)
    return JWT.verify(token, SECRET)
}